package org.example.servlet;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.Arrays;
import java.util.List;

/**
 * 测试json在Java中的使用
 */
public class TestJSON {

    /**
     * {"username":"bit","password":"111"}
     */
    public static void main(String[] args) throws JsonProcessingException {
        //json反序列化：json字符串转java对象
        String json = "{\"username\":\"bit\",\"password\":\"111\"}";
        //需要使用jackson框架提供的api来完成
        //这个对象就是辅助完成json字符串和Java对象互相转换
        ObjectMapper mapper = new ObjectMapper();
//        //可以转换为map，但是里边的键，还是不太方便使用
//        HashMap map = mapper.readValue(json, HashMap.class);
//        System.out.println(map);
        //更建议的做法，是自定义一个类型，成员变量名就是json字符串的键名（类型保持一致）
        User user = mapper.readValue(json, User.class);
        System.out.println(user);

        User u1 = new User();
        u1.setUsername("哈哈");
        u1.setPassword("123");
        String json1 = mapper.writeValueAsString(u1);
        System.out.println(json1);
        User u2 = new User();
        u2.setUsername("是看得见");
        u2.setPassword("456");
        // 初始化list，就包含u1，u2两个对象
        List<User> users = Arrays.asList(u1, u2);
        String json2 = mapper.writeValueAsString(users);
        System.out.println(json2);

        // 复杂的json对象
        Classes c1 = new Classes();
        c1.setId(1);
        c1.setName("中文系1班");
        c1.setStudents(users);
        String json3 = mapper.writeValueAsString(c1);
        System.out.println(json3);
    }

}
